//#include <iostream>
//#include <vector>
//using namespace std;
//
//const int N = 1e5 + 10;
//
//vector<int> edges[N];
//bool st[N];
//
//void dfs(int x){
//	cout << x << " ";
//	st[x] = true;
//	for(auto v : edges[x]){
//		if(!st[v]) dfs(v);
//	} 
//} 
//
//int main(){
//	int n;
//	cin >> n;
//	for(int i = 1;i < n;i++){
//		int a,b;
//		cin >> a >> b;
//		edges[a].push_back(b);
//		edges[b].push_back(a);
//	}
//	dfs(1);
//	return 0;
//}

#include <iostream>
using namespace std;

const int N = 1e5 + 10;

int id;
int e[N*2],ne[N*2],h[N];
bool st[N];

void adds(int a,int b){
	id++;
	e[id] = b;
	ne[id] = h[a];
	h[a] = id;
}

void dfs(int x){
	cout << x << " ";
	st[x] = true;
	for(int i = h[x];i;i = ne[i]){
		int v = e[i];
		if(!st[v]) dfs(v);
	} 
}


int main(){
	int n;
	cin >> n;
	for(int i = 1;i < n;i++){
		int a,b;
		cin >> a >> b;
		adds(a,b);
		adds(b,a);
	}
	dfs(1);
	return 0;
} 
